﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Sociedad.BL;
using Sociedad.DAL;

public partial class SOA_BandejaWF_Aprobar_RegistroLegajo : System.Web.UI.Page
{
    SociedadBL blSociedad = new SociedadBL();
    ParametroBL blParam = new ParametroBL();
    UbigeoBL blUbigeo = new UbigeoBL();
    Soa_Sociedad_Registro beReg = new Soa_Sociedad_Registro();
    WfDocumentoBL blDocWF = new WfDocumentoBL();
    Wfs_SeguimientoDocumento beDocWF = new Wfs_SeguimientoDocumento();

    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            if (!Page.IsPostBack)
            {
                if (Session[Constantes.session_Codigo_RegistroLegajo] != null)
                {
                    String cReg = Session[Constantes.session_Codigo_RegistroLegajo].ToString();
                    txtCodSociedad.Text = cReg.Substring(0, 4);
                    txtNroReg.Text = cReg.Substring(5, cReg.Length - 5);
                    Inicializar();
                }
                else
                {
                    lblMsj.Text = "Se produjo un error al intentar cargar los datos de la solicitud, volver a intentar.";
                    lblMsj.ForeColor = System.Drawing.Color.Red;
                    lblMsj.Visible = true;
                }
            }
            else
            {
                lblMsj.Visible = false;
            }
        }
        catch (Exception ex)
        {
            lblMsj.Text = "Se produjo un error inesperado, volver a intentar.";
            lblMsj.ForeColor = System.Drawing.Color.Red;
            lblMsj.Visible = true;
        }
    }

    public void Inicializar()
    {
        try
        {
            // Verificar si existe un Registro Emitido o Por Subsanar para mostrar datos
            beReg = blSociedad.Buscar_UltimoRegistroPendiente(txtCodSociedad.Text);

            //Cargar Opciones WF
            List<vw_Listar_OpcionesWF_CalificacionDoc> lstOp = new List<vw_Listar_OpcionesWF_CalificacionDoc>();
            vw_Listar_OpcionesWF_CalificacionDoc beOp = new vw_Listar_OpcionesWF_CalificacionDoc();
            beOp.cEstDestino = "0";
            beOp.cEstDestinoDes = "<Seleccionar>";
            lstOp = blDocWF.Listar_OpcionesWF_CalificacionDOC(Constantes.wfTipDoc_RegistroLegajo, beReg.cprm_Estado);
            List<vw_Listar_OpcionesWF_CalificacionDoc> lstOp1 = new List<vw_Listar_OpcionesWF_CalificacionDoc>();
            lstOp1.Add(beOp);
            for (int i = 1; i <= lstOp.Count(); i++)
            {
                lstOp1.Add(lstOp[i - 1]);
            }
            ddlOpcion.DataSource = lstOp1;
            ddlOpcion.DataTextField = "cEstDestinoDes";
            ddlOpcion.DataValueField = "cEstDestino";
            ddlOpcion.SelectedValue = "0";
            ddlOpcion.DataBind();

            Iniciar_Tab(1);
            Iniciar_Tab(2);
            CargarDatos_Tab(1);
            CargarDatos_Tab(2);
        }
        catch (Exception ex)
        {
            lblMsj.Text = "Se produjo un error inesperado al intentar cargar los datos, volver a intentar.";
            lblMsj.ForeColor = System.Drawing.Color.Red;
            lblMsj.Visible = true;
        }
    }

    private void Iniciar_Tab(int pTab)
    {
        switch (pTab)
        {
            // Panel Datos Generales
            case 1:
                // Cargar Departamento de domicilio Legal
                List<Ubi_Departamento> lstDept = new List<Ubi_Departamento>();
                Ubi_Departamento Dept = new Ubi_Departamento();
                Dept.cdep_Codigo = "0";
                Dept.cdep_Nombre = "<Seleccionar>";
                lstDept = blUbigeo.Listar_Departamentos();
                List<Ubi_Departamento> lstDeptNew = new List<Ubi_Departamento>();
                lstDeptNew.Add(Dept);
                for (int i = 1; i <= lstDept.Count(); i++)
                {
                    lstDeptNew.Add(lstDept[i - 1]);
                }
                ddlDepartamento.DataSource = lstDeptNew;
                ddlDepartamento.DataTextField = "cdep_Nombre";
                ddlDepartamento.DataValueField = "cdep_Codigo";
                ddlDepartamento.DataBind();

                // Cargar Departamento de Constitución de Empresa
                lstDept = new List<Ubi_Departamento>();
                Dept = new Ubi_Departamento();
                Dept.cdep_Codigo = "0";
                Dept.cdep_Nombre = "<Seleccionar>";
                lstDept = blUbigeo.Listar_Departamentos();
                lstDeptNew = new List<Ubi_Departamento>();
                lstDeptNew.Add(Dept);
                for (int i = 1; i <= lstDept.Count(); i++)
                {
                    lstDeptNew.Add(lstDept[i - 1]);
                }
                ddlDepartamentoCons.DataSource = lstDeptNew;
                ddlDepartamentoCons.DataTextField = "cdep_Nombre";
                ddlDepartamentoCons.DataValueField = "cdep_Codigo";
                ddlDepartamentoCons.DataBind();

                // Cargar Tipo de Dirección
                List<Soa_Parametros> lstParam = new List<Soa_Parametros>();
                Soa_Parametros param = new Soa_Parametros();
                param.cprm_Codigo = "0";
                param.cprm_Descripcion = "<Seleccionar>";
                lstParam = blParam.Listar_Parametros("01");
                List<Soa_Parametros> lstParamNew = new List<Soa_Parametros>();
                lstParamNew.Add(param);
                for (int i = 1; i <= lstParam.Count(); i++)
                {
                    lstParamNew.Add(lstParam[i - 1]);
                }
                ddlTipoDireccion.DataSource = lstParamNew;
                ddlTipoDireccion.DataTextField = "cprm_Descripcion";
                ddlTipoDireccion.DataValueField = "cprm_Codigo";
                ddlTipoDireccion.DataBind();

                this.txtAutovaluo.Text = "0";
                this.txtCapitalSocial.Text = "0";
                break;

            case 2:
                // Cargar Tipo de Documento
                List<Soa_Parametros> lstParam1 = new List<Soa_Parametros>();
                Soa_Parametros param1 = new Soa_Parametros();
                param1.cprm_Codigo = "0";
                param1.cprm_Descripcion = "<Seleccionar>";
                lstParam1 = blParam.Listar_Parametros("02");
                List<Soa_Parametros> lstParamNew1 = new List<Soa_Parametros>();
                lstParamNew1.Add(param1);
                for (int i = 1; i <= lstParam1.Count(); i++)
                {
                    lstParamNew1.Add(lstParam1[i - 1]);
                }
                ddlTipDoc.DataSource = lstParamNew1;
                ddlTipDoc.DataTextField = "cprm_Abrevia";
                ddlTipDoc.DataValueField = "cprm_Codigo";
                ddlTipDoc.DataBind();
                break;
        }
    }

    private void CargarDatos_Tab(int pTab)
    {
        switch (pTab)
        {
            // Estado de Datos Generales
            case 1:
                this.ddlTipoDireccion.Text = beReg.cprm_TipDomicilio;
                this.txtDireccion.Text = beReg.csoc_Domicilio;
                this.ddlDepartamento.Text = beReg.cdep_CodDom;
                ddlDepartamento_SelectedIndexChanged(new Object(), new EventArgs());
                this.ddlProvincia.Text = beReg.cpro_CodDom;
                ddlProvincia_SelectedIndexChanged(new Object(), new EventArgs());
                this.ddlDistrito.Text = beReg.cdis_CodDom;
                this.ddlDepartamentoCons.Text = beReg.cdep_CodCons;
                ddlDepartamentoCons_SelectedIndexChanged(new Object(), new EventArgs());
                this.ddlProvinciaCons.Text = beReg.cpro_CodCons;
                this.txtCapitalSocial.Text = beReg.nsoc_MonCapitalInicial.ToString();
                this.txtNroFicha.Text = beReg.csoc_NumFicha;
                this.txtFecIns.Text = DateTime.Now.ToShortDateString();
                this.txtFecIniOpe.Text = DateTime.Now.ToShortDateString();
                this.txtEmail.Text = beReg.csoc_Email;
                this.txtPaginaWeb.Text = beReg.csoc_PaginaWeb;
                this.txtTelefono.Text = beReg.csoc_Telefonos;
                this.txtFax.Text = beReg.csoc_Fax;
                this.txtAutovaluo.Text = beReg.nsoc_MonAutovaluo.ToString();
                hdfEstado.Value = beReg.cprm_Estado;
                break;
            case 2:
                grvListaRepLegal.DataSource = blSociedad.Listar_RepresentantesSociedad(txtCodSociedad.Text, Convert.ToInt16(txtNroReg.Text));
                grvListaRepLegal.DataBind();
                break;
        }
    }

    protected void ddlDepartamento_SelectedIndexChanged(object sender, EventArgs e)
    {

        List<Ubi_Provincia> lstProv = new List<Ubi_Provincia>();
        Ubi_Provincia prov = new Ubi_Provincia();
        prov.cpro_Codigo = "0";
        prov.cpro_Nombre = "<Seleccionar>";
        lstProv = blUbigeo.Listar_Provincias(ddlDepartamento.SelectedValue.ToString());
        List<Ubi_Provincia> lstNew = new List<Ubi_Provincia>();
        lstNew.Add(prov);
        for (int i = 1; i <= lstProv.Count(); i++)
        {
            lstNew.Add(lstProv[i - 1]);
        }
        ddlProvincia.DataSource = lstNew;
        ddlProvincia.DataTextField = "cpro_Nombre";
        ddlProvincia.DataValueField = "cpro_Codigo";
        ddlProvincia.DataBind();

        ddlDistrito.DataSource = null;
        ddlDistrito.DataBind();
    }

    protected void ddlProvincia_SelectedIndexChanged(object sender, EventArgs e)
    {
        List<Ubi_Distrito> lstDist = new List<Ubi_Distrito>();
        Ubi_Distrito dist = new Ubi_Distrito();
        dist.cdis_Codigo = "0";
        dist.cdis_Nombre = "<Seleccionar>";
        lstDist = blUbigeo.Listar_Distritos(ddlProvincia.SelectedValue.ToString(), ddlDepartamento.SelectedValue.ToString());
        List<Ubi_Distrito> lstNew = new List<Ubi_Distrito>();
        lstNew.Add(dist);
        for (int i = 1; i <= lstDist.Count(); i++)
        {
            lstNew.Add(lstDist[i - 1]);
        }
        ddlDistrito.DataSource = lstNew;
        ddlDistrito.DataTextField = "cdis_Nombre";
        ddlDistrito.DataValueField = "cdis_Codigo";
        ddlDistrito.DataBind();
    }

    protected void ddlDepartamentoCons_SelectedIndexChanged(object sender, EventArgs e)
    {
        List<Ubi_Provincia> lstProv = new List<Ubi_Provincia>();
        Ubi_Provincia prov = new Ubi_Provincia();
        prov.cpro_Codigo = "0";
        prov.cpro_Nombre = "<Seleccionar>";
        lstProv = blUbigeo.Listar_Provincias(ddlDepartamento.SelectedValue.ToString());
        List<Ubi_Provincia> lstNew = new List<Ubi_Provincia>();
        lstNew.Add(prov);
        for (int i = 1; i <= lstProv.Count(); i++)
        {
            lstNew.Add(lstProv[i - 1]);
        }
        ddlProvinciaCons.DataSource = lstNew;
        ddlProvinciaCons.DataTextField = "cpro_Nombre";
        ddlProvinciaCons.DataValueField = "cpro_Codigo";
        ddlProvinciaCons.DataBind();
    }

    private String Validar_DatosWF()
    {
        if (ddlOpcion.SelectedValue.Equals("0"))
        {
            return "Seleccione una opción como resultado de la evaluación del documento.";
        }
        if (ddlOpcion.SelectedValue.Equals(Constantes.Estado_SolcitudInscripcion_Denegado) && String.IsNullOrEmpty(txtComentario.Text))
        {
            return "Está denegando el documento, debe de registrar un comentario de sustento.";
        }
        return "";
    }

    protected void imbAceptarWF_Click(object sender, ImageClickEventArgs e)
    {
        try
        {
            String cRpta = Validar_DatosWF();
            if (String.IsNullOrEmpty(cRpta))
            {
                modalPopupGuardar.Show();
            }
            else
            {
                lblMsj.Text = cRpta;
                lblMsj.ForeColor = System.Drawing.Color.Red;
                lblMsj.Visible = true;
            }
        }
        catch (Exception ex)
        {
            lblMsj.Text = "Se produjo un error al intentar validar los datos, volver a intentar.";
            lblMsj.ForeColor = System.Drawing.Color.Red;
            lblMsj.Visible = true;
        }
    }

    protected void imb_Cerrar_Click(object sender, ImageClickEventArgs e)
    {
        Response.Redirect("BandejaEvaluador.aspx");
    }

    // Método para registrar resultado de evaluación
    protected void imbOK2_Click(object sender, ImageClickEventArgs e)
    {
        try
        {
            beDocWF.ctdo_Codigo = Constantes.wfTipDoc_RegistroLegajo;
            beDocWF.cedo_CodDoc = txtCodSociedad.Text + '-' + txtNroReg.Text;
            beDocWF.cprm_EnviaTipUO = Session[Constantes.session_CodTipUO].ToString();
            beDocWF.cent_EnviaUO = Session[Constantes.session_CodUniOrg].ToString();
            beDocWF.usr_EnviaUser = Session[Constantes.session_CodUsuario].ToString();
            beDocWF.csdo_Comentario = txtComentario.Text;
            beDocWF.cprm_Estado = ddlOpcion.SelectedValue;

            String[] cRpta = blDocWF.Registrar_DocumentoWF(beDocWF, 'S').Split('@');
            if (cRpta[0] == "1")
            {
                Response.Redirect("BandejaEncargadoGerenciaCentral.aspx");
            }
            else
            {
                if (String.IsNullOrEmpty(cRpta[1]))
                {
                    lblMsj.Text = "Se produjo un error inesperado, cierre la ventana y vuelva a intentar enviar.";
                    lblMsj.ForeColor = System.Drawing.Color.Red;
                    lblMsj.Visible = true;
                }
                else
                {
                    lblMsj.Text = cRpta[1];
                    lblMsj.ForeColor = System.Drawing.Color.Red;
                    lblMsj.Visible = true;
                }
            }
        }
        catch (Exception ex)
        {
            lblMsj.Text = "Se produjo un error inesperado al intentar registrar el resultado de la evaluación, cierre la ventana y vuelva a intentar enviar.";
            lblMsj.ForeColor = System.Drawing.Color.Red;
            lblMsj.Visible = true;
        }
    }
}